﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;

/*****************************************************************************************************************          
 Copyright © 2010 - Banco Itaú BBA S.A          
         
 Exportação para Excel de Contratos:  Tela que chama a tela 
            
 Histórico de Alterações:      
  18/06/2010 - Adriane M Souza	- Criacao OS375720

 *****************************************************************************************************************/

namespace ibba.src.norisk
{
    public partial class PageProdutoModalidadeExpExcel : ChildWindow
    {
        #region Variaveis

        private List<ServiceTipoParametro.TipoParametro> _oParametro;
        private List<ServiceProdutoModalidade.ParametroProdutoModalidade> _oParProdutoModalidade;

        private int _requisicoesEmAndamento = 2;

        private int _iValorSelecionado;

        #endregion

        /// <summary>
        /// Page Load do Objeto Silverlight - Carrega o layout em janela .
        /// </summary>
        public PageProdutoModalidadeExpExcel()
        {
            InitializeComponent();
            _oParametro = new List<ServiceTipoParametro.TipoParametro>();
            _oParProdutoModalidade = new List<ibba.src.norisk.ServiceProdutoModalidade.ParametroProdutoModalidade>();

            //rbContrato.IsChecked = true;

            CarregarComboTipoParametro();

        }


        #region Eventos

        private void cboParametro_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if ((ServiceTipoParametro.TipoParametro)cboParametro.SelectedItem != null)
            {
                _iValorSelecionado = ((ServiceTipoParametro.TipoParametro)cboParametro.SelectedItem).CodParametro;

                ServiceFactory.GetInstance().ServiceProdutoModalidade.BeginObterRelatorioParametroProduto(_iValorSelecionado,
                                                    CallBackObterRelatorioParametroProduto,
                                                    ServiceFactory.GetInstance().ServiceProdutoModalidade);

            }
        }

        private void btnFechar_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnExportarArquivo_Click(object sender, RoutedEventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "CSV Files|*.csv" + "|All Files|*.*";
            bool? dialogResult = dialog.ShowDialog();

            if ((ServiceTipoParametro.TipoParametro)cboParametro.SelectedItem == null)
            {
                //Exibe mensagem para usuário selecionar um tipo de parâmetro
                MessageBoxHelper.ShowWarning("Aviso", "Deve ser selecionado um tipo de parâmetro.");
                return;
            }
            else
                _iValorSelecionado = ((ServiceTipoParametro.TipoParametro)cboParametro.SelectedItem).CodParametro;

            if (dialogResult == true)
            {

                ServiceFactory.GetInstance().ServiceProdutoModalidade.BeginObterRelatorioParametroProduto(_iValorSelecionado,
                                                    CallBackObterRelatorioParametroProduto,
                                                    ServiceFactory.GetInstance().ServiceProdutoModalidade);

                if (_oParProdutoModalidade != null)
                {
                    try
                    {
                        using (Stream stream = dialog.OpenFile())
                        {
                            byte[] tbyte;

                            System.Text.Encoding utf8 = Encoding.UTF8;
                            tbyte = utf8.GetBytes(ValidarArquivo());

                            stream.Write(tbyte, 0, tbyte.Length);
                            stream.Close();

                            LimpaCampos();
                            MessageBoxHelper.ShowSucess("Sucesso", "Arquivo Salvo com Sucesso.");
                            return;
                        }
                    }
                    catch
                    {
                        this.txbSubTitulo.Text = "";
                MessageBoxHelper.ShowErro("Aviso", "Não foi possível selecionar o arquivo! Verifique se o arquivo está aberto ou sendo usado por outro processo.", null);
                        return;

                    }
                }
                else
                {
                    // Nenhum resultado foi retornado da base de dados
                    MessageBoxHelper.ShowMessage(AppHelper.NomeSistema, "Nenhum Resultado foi encontrado");
                    return;

                }
            }
        }

        private void rbProdutoModalidade_Click(object sender, RoutedEventArgs e)
        {
            CarregarComboTipoParametro();
        }

        
        #endregion

        #region Métodos

        /// <summary>
        /// Carrega todos os Tipos de Parametros Cadastrados
        /// </summary>
        private void CarregarComboTipoParametro()
        {
           ServiceFactory.GetInstance().ServiceTipoParametro.BeginObterTipoParametroProdutoModalidade(CallBackObterTipoParametroProdutoModalidade,
                 ServiceFactory.GetInstance().ServiceTipoParametro);          
        }

        /// <summary>
        /// Evento de CallBack da Pagina para o Serviço de Tipo de Parametro
        /// </summary>
        /// <param name="pAsyncResult"></param>
        private void CallBackObterTipoParametroProdutoModalidade(IAsyncResult pAsyncResult)
        {
            this.Dispatcher.BeginInvoke(delegate()
            {
                _oParametro = ((ServiceTipoParametro.ITipoParametro)pAsyncResult.AsyncState).EndObterTipoParametroProdutoModalidade(pAsyncResult);
                this.cboParametro.ItemsSource = _oParametro;
            });
        }



        /// <summary>
        /// Evento de CallBack da Pagina para o Serviço de Tipo de Parametro
        /// </summary>
        /// <param name="pAsyncResult"></param>
        private void CallBackObterRelatorioParametroProduto(IAsyncResult pAsyncResult)
        {
            this.Dispatcher.BeginInvoke(delegate()
           {
               _oParProdutoModalidade = ((ServiceProdutoModalidade.IProdutoModalidade)pAsyncResult.AsyncState).EndObterRelatorioParametroProduto(pAsyncResult);

               System.Threading.Interlocked.Decrement(ref _requisicoesEmAndamento);

           });
        }

        public void Show(ServiceContratoOperacao.ContratoOperacao pContratoOperacao)
        {

            this.Visibility = Visibility.Visible;
            this.Show();

        }

        private string ValidarArquivo()
        {

            StringBuilder sbRetorno = new StringBuilder();

                if (_oParProdutoModalidade != null)
                {

                    sbRetorno.Append("PRODUTO;");
                    sbRetorno.Append("MODALIDADE;");
                    sbRetorno.Append("DESC_PRODUTO;");
                    sbRetorno.Append("DESC_MODALIDADE;");
                    sbRetorno.Append("PARAMETRO\r\n");


                    foreach (ServiceProdutoModalidade.ParametroProdutoModalidade item in _oParProdutoModalidade)
                    {
                        sbRetorno.Append(item.CodProduto.ToString());
                        sbRetorno.Append(";");
                        sbRetorno.Append(item.CodModalidade.ToString());
                        sbRetorno.Append(";");
                        sbRetorno.Append(item.DscProduto);
                        sbRetorno.Append(";");
                        sbRetorno.Append(item.DscModalidade.ToString());
                        sbRetorno.Append(";");
                        sbRetorno.Append(item.valor);
                        sbRetorno.Append("\r\n");

                    }
                }
           
            return sbRetorno.ToString();
        }


        private void LimpaCampos()
        {
            cboParametro.SelectedItem = null;
        }
        #endregion

    }
}